package chenqianghao.rbac.service;

import chenqianghao.rbac.domain.dto.DeptDto;
import chenqianghao.rbac.domain.entity.Dept;
import chenqianghao.rbac.domain.vo.DeptVo;
import chenqianghao.rbac.domain.vo.Result;

import java.util.Arrays;

/**
 * 业务层-部门
 *
 * @author 陈蔷好
 * @since 2025/3/12 19:39
 */
public class DeptService {

    public static int DATA_SIZE = 100;

    public static Dept[] data = new Dept[DATA_SIZE + 1];

    public static int idCounter = 1;

    public static DeptVo convertToVo(Dept dept) {
        return new DeptVo(dept.id, dept.name, dept.phone);
    }

    public static Dept createEntity(DeptDto dto, int id) {
        Dept dept = new Dept(dto.name, dto.phone);
        dept.id = id;
        return dept;
    }

    public static void updateEntity(DeptDto dto, Dept dept) {
        dept.name = dto.name;
        dept.phone = dto.phone;
    }

    public static boolean existsById(int id) {
        return id < 1 && id >= idCounter && data[id] == null;
    }

    public static Dept findById(int id) {
        if(existsById(id)) {
            return data[id];
        }
        return null;
    }

    public static Result list() {
        DeptVo[] temp = new DeptVo[DATA_SIZE];
        int length = 0;
        for (int i = 1; i < idCounter; i++) {
            if (data[i] != null) {
                temp[length++] = convertToVo(data[i]);
            }
        }
        return Result.success("查询成功", Arrays.copyOf(temp, length));
    }

    public static Result create(DeptDto dto) {
        if (idCounter > DATA_SIZE) {
            return Result.failure("创建失败，超出了储存容量");
        }
        Dept dept = createEntity(dto, idCounter++);
        data[dept.id] = dept;
        return Result.success("创建成功", null);
    }

    public static Result update(DeptDto dto,int id) {
        if (existsById(id)) {
            return Result.failure("更新失败，不存在该数据");
        }
        Dept dept = data[id];
        updateEntity(dto, dept);
        return Result.success("更新成功",null);
    }

    public static Result delete(int id) {
        if(existsById(id)) {
            return Result.failure("删除失败，不存在该数据");
        }
        if(UserService.deptInUse(id)) {
            return Result.failure("删除失败，还有用户属于该部门，不能删除");
        }
        data[id] = null;
        return Result.success("删除成功",null);
    }
}
